a11y: Update labelled-by when setting mnemonic labels
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 22 Jul 2020 12:11:28 +0000 (13:11 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 26 Jul 2020 19:31:15 +0000 (20:31 +0100)
The ARIA labelled-by attribute behaves the same way as the mnemonic
labels in GTK.

gtk/gtkwidget.c

index 49121957e5327f3aa78d0d3bb0c7bc75f9df7141..b3e1c61e689e2d8c14e1fa0d8dde9292e2898751 100644 (file)
@@ -8960,6 +8960,10 @@ gtk_widget_add_mnemonic_label (GtkWidget *widget,
 
   g_object_set_qdata_full (G_OBJECT (widget), quark_mnemonic_labels,
                           new_list, (GDestroyNotify) g_slist_free);
+
+  gtk_accessible_update_relation (GTK_ACCESSIBLE (widget),
+                                  GTK_ACCESSIBLE_RELATION_LABELLED_BY, new_list,
+                                  -1);
 }
 
 /**
@@ -8988,6 +8992,19 @@ gtk_widget_remove_mnemonic_label (GtkWidget *widget,
   if (new_list)
     g_object_set_qdata_full (G_OBJECT (widget), quark_mnemonic_labels,
                             new_list, (GDestroyNotify) g_slist_free);
+
+  if (new_list != NULL && new_list->data != NULL)
+    {
+      gtk_accessible_update_relation (GTK_ACCESSIBLE (widget),
+                                      GTK_ACCESSIBLE_RELATION_LABELLED_BY, new_list,
+                                      -1);
+    }
+  else
+    {
+      gtk_accessible_update_relation (GTK_ACCESSIBLE (widget),
+                                      GTK_ACCESSIBLE_RELATION_LABELLED_BY, NULL,
+                                      -1);
+    }
 }
 
 /**